package org.linloong.modules.apis.ai.dto;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * Dify 消息响应 DTO
 */
@Data
public class DifyMessageResponse {
    
    /**
     * 消息唯一 ID
     */
    private String id;
    
    /**
     * 回复内容
     */
    private String answer;
    
    /**
     * 对话 ID
     */
    @JsonProperty("conversation_id")
    private String conversationId;
    
    /**
     * 消息创建时间
     */
    @JsonProperty("created_at")
    private Long createdAt;
    
    /**
     * 反馈信息
     */
    private Object feedback;
    
    /**
     * 元数据
     */
    private Metadata metadata;
    
    /**
     * 错误信息
     */
    private String error;
    
    /**
     * 错误码
     */
    private String code;
    
    @Data
    public static class Metadata {
        /**
         * 使用情况
         */
        private Usage usage;
        
        /**
         * 引用和归属分段列表
         */
        @JsonProperty("retriever_resources")
        private List<RetrieverResource> retrieverResources;
    }
    
    @Data
    public static class Usage {
        /**
         * 提示消息单元消耗
         */
        @JsonProperty("prompt_tokens")
        private Integer promptTokens;
        
        /**
         * 提示消息 pricing
         */
        @JsonProperty("prompt_unit_price")
        private String promptUnitPrice;
        
        /**
         * 提示消息费用
         */
        @JsonProperty("prompt_price")
        private String promptPrice;
        
        /**
         * 回复消息单元消耗
         */
        @JsonProperty("completion_tokens")
        private Integer completionTokens;
        
        /**
         * 回复消息 pricing
         */
        @JsonProperty("completion_unit_price")
        private String completionUnitPrice;
        
        /**
         * 回复消息费用
         */
        @JsonProperty("completion_price")
        private String completionPrice;
        
        /**
         * 总消耗
         */
        @JsonProperty("total_tokens")
        private Integer totalTokens;
        
        /**
         * 总费用
         */
        @JsonProperty("total_price")
        private String totalPrice;
        
        /**
         * 货币单位
         */
        private String currency;
        
        /**
         * 延迟时间
         */
        @JsonProperty("latency")
        private Double latency;
    }
    
    @Data
    public static class RetrieverResource {
        private Integer position;
        
        @JsonProperty("dataset_id")
        private String datasetId;
        
        @JsonProperty("dataset_name")
        private String datasetName;
        
        @JsonProperty("document_id")
        private String documentId;
        
        @JsonProperty("document_name")
        private String documentName;
        
        @JsonProperty("segment_id")
        private String segmentId;
        
        private Double score;
        
        private String content;
    }
}